﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using RRTWSEntityDSD.Dominio;
using RRTWSNegocioDSD.Dao;
using RRTWSEntityDSD.Dao;
using System.ServiceModel.Web;
using System.Net;

namespace RRTWSEntityDSD.ServiceEntidad.WFCServiceREST
{
    // NOTA: puede usar el comando "Rename" del menú "Refactorizar" para cambiar el nombre de clase "WCFEstadoServices" en el código, en svc y en el archivo de configuración a la vez.
    public class WCFEstadoServices : IWCFEstadoServices
    {
        private static EstadoDAO estadoDAO = new EstadoDAO();

        /// <summary>
        /// Metodo Danielle
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        //public EstadoEntrada getEstado(string id)
        //{
        //    int _id = int.Parse(id);
        //    return estadoDAO.getEstado(_id);
        //}




        public EstadoEntrada CrearEstadoEntrada(EstadoEntrada estadoACrear)
        {
            
            if (string.IsNullOrEmpty(estadoACrear.descripcion))
            {
                throw new WebFaultException<string>("Es necesario darle un nombre al Estado", HttpStatusCode.InternalServerError);
            }
            if ("8".Equals(estadoACrear.idEstado.ToString()))
            {
                throw new WebFaultException<string>("No puede ingresar el id estado 8", HttpStatusCode.InternalServerError);
            }
            return estadoDAO.Crear(estadoACrear);
        }

        public EstadoEntrada ObtenerEstadoEntrada(string codigo)
        {
            //try
            //{
            if (string.IsNullOrEmpty(codigo))
                throw new WebFaultException<string>("El código no puede ser nulo o vacío", HttpStatusCode.InternalServerError);

            int _codigo = int.Parse(codigo);
            if (_codigo == 0)
                throw new WebFaultException<string>("El código no puede ser cero", HttpStatusCode.InternalServerError);

            EstadoEntrada ee = new EstadoEntrada();
            ee = estadoDAO.Obtener(_codigo);
            if (ee == null)
                throw new WebFaultException<string>("No existe estado con código: " + codigo, HttpStatusCode.InternalServerError);
            return ee;
            //}
            //catch (Exception e)
            //{

            //    throw new Exception("Sucedió el siguiente error: " + e.Message);
            //}
        }

        public EstadoEntrada ModificarEstadoEntrada(EstadoEntrada estadoAModificar)
        {
            return estadoDAO.Modificar(estadoAModificar);
        }

        public void EliminarEstadoEntrada(string codigo)
        {
            if (string.IsNullOrEmpty(codigo))
                throw new WebFaultException<string>("El código no puede ser nulo o vacío", HttpStatusCode.InternalServerError);

            int _codigo = int.Parse(codigo);
            if (_codigo == 0)
                throw new WebFaultException<string>("El código no puede ser cero", HttpStatusCode.InternalServerError);

            
            EstadoEntrada estadoEntradaExistente = estadoDAO.Obtener(_codigo);
            if (estadoEntradaExistente == null)
                throw new WebFaultException<string>("No existe estado con código: " + codigo, HttpStatusCode.InternalServerError);
            estadoDAO.Eliminar(estadoEntradaExistente);
        }

        public List<EstadoEntrada> ListarEstados()
        {
            List<EstadoEntrada> lstEstado = null;
            lstEstado = estadoDAO.ListarTodos().ToList();
            if (lstEstado == null)
                throw new WebFaultException<string>("Sin datos para listar Estado", HttpStatusCode.InternalServerError);
            return lstEstado;
        }
    }
}
